package com.sgzn.sgpay.service.tcp.model.terminal.request;

import com.sgzn.sgpay.service.tcp.SgTcpProtocolHead;
import com.sgzn.sgpay.service.tcp.util.SgTcpUtil;
import lombok.Data;

/**
 * 设置终端参数(娃娃机) 请求类
 *
 * 备注：此指令用于设置设备的参数，包括音乐背景，抓力调节等，多字节数据低位在前。
 * @author huangsenguang
 * @version Id: TcpSetTerminalParamBabyRequest.java, v 0.1 2018/7/19 19:03 huangsenguang Exp $$
 */
@Data
public class TcpSetTerminalParamBabyRequest extends TcpCommonRequest{
    /**
     * 长度
     */
    private String length="14";

    /**
     * 索引
     */
    private String index="01";

    /**
     * 命令
     */
    private String cmd="03";


    //--------------------------------以下是data
    /**
     * Data [0]	游戏模式	1	 0弱抓力模式
     1固定强抓力
     2随机强抓力
     3固定强抓力--补
     4随机强抓力--补
     */
    private int gameModle = 2;

    /**
     * Data [1-2]	中奖概率	2	范围1～888
     */
    private int awardProbability = 10;

    /**
     * Data [3-4]	强力电压	2	整数部分+小数部分，范围15.0～47.5
     Data[3]：整数 data[4]:小数（先发送整数部分）
     */
    //强力电压 Data[3]：整数
    private int powerfulVoltageInteger = 16;
    //强力电压 data[4]:小数（先发送整数部分）
    private int powerfulVoltageDecimal = 0;

    /**
     * Data [5-6]	弱力电压	2	整数部分+小数部分，范围4.5～40.0
     Data[5]：整数 data[6]:小数（先发送整数部分）
     */
    //弱力电压 Data[5]：整数
    private int weakVoltageInteger = 5;
    //弱力电压 data[6]:小数（先发送整数部分）
    private int weakVoltageDecimal = 0;

    /**
     * Data [7-8]	强转弱时间	2	整数部分+小数部分，范围0.1～3.0
     Data[7]：整数 data[8]:小数（先发送整数部分）
     */
    //强转弱时间 Data[7]：整数
    private int powerToWeakTimeInteger = 1;
    //强转弱时间 data[8]:小数（先发送整数部分）
    private int powerToWeakTimeDecimal = 0;

    /**
     * Data [9]	到顶转弱抓力	1	1字节，0关闭，1开启
     */
    private int toTopConvertWeakForce = 0;

    /**
     * Data [10]	几币一玩	1	范围1～20
     */
    private int coinPlay = 10;

    /**
     * Data [11]	游戏时间	1	范围5～60
     */
    private int playTime = 5;

    /**
     * Data [12]	背景音乐	1	0关闭，1开启
     */
    private int music = 1;

    /**
     * Data [13]	抓不到补币	1	0关闭，1开启
     */
    private int unCatchFillCoin = 0;

    /**
     * Data [14]	按键抓物	1	0关闭，1开启
     */
    private int keyForCatch = 0;

    /**
     * Data [15]	连投赠币	1	0关闭，1～60开启连投赠币
     */
    private int continueAwardCoin = 0;

    /**
     * Data [16]	游戏自动开始	1	0关闭，1开启
     */
    private int gameAutoStart = 0;



    @Override
    public String toString(){
        //根据协议规范重载toString方法
        return beginCode + SgTcpProtocolHead.TCP_SEND_SEPERATOR +
                serialCode + SgTcpProtocolHead.TCP_SEND_SEPERATOR +
                deviceId + SgTcpProtocolHead.TCP_SEND_SEPERATOR +
                commandReq + SgTcpProtocolHead.TCP_SEND_SEPERATOR +
                head + length + index + cmd + getData() +
                getAllCheck(length + index + cmd + getData()) + end + SgTcpProtocolHead.TCP_SEND_SEPERATOR +
                checkSumCode + SgTcpProtocolHead.TCP_SEND_SEPERATOR +
                endCode;
    }

    /**
     * 获取校验码
     * @param needToCheck
     * @return
     */
    private String getAllCheck(String needToCheck) {
        this.setCheck(SgTcpUtil.getToCheck(needToCheck));
        return this.check;
    }

    /**
     * 获取Data 数据
     * @return
     */
    private String getData() {
        StringBuilder sb = new StringBuilder();
        sb.append(SgTcpUtil.cutOrSupplement(String.valueOf(gameModle), 2));
        sb.append(getConvertResult(String.valueOf(awardProbability)));
        sb.append(SgTcpUtil.cutOrSupplement(String.valueOf(powerfulVoltageInteger), 2));
        sb.append(SgTcpUtil.cutOrSupplement(String.valueOf(powerfulVoltageDecimal), 2));
        sb.append(SgTcpUtil.cutOrSupplement(String.valueOf(weakVoltageInteger), 2));
        sb.append(SgTcpUtil.cutOrSupplement(String.valueOf(weakVoltageDecimal), 2));
        sb.append(SgTcpUtil.cutOrSupplement(String.valueOf(powerToWeakTimeInteger), 2));
        sb.append(SgTcpUtil.cutOrSupplement(String.valueOf(powerToWeakTimeDecimal), 2));
        sb.append(SgTcpUtil.cutOrSupplement(String.valueOf(toTopConvertWeakForce), 2));
        sb.append(SgTcpUtil.cutOrSupplement(String.valueOf(coinPlay), 2));
        sb.append(SgTcpUtil.cutOrSupplement(String.valueOf(playTime), 2));
        sb.append(SgTcpUtil.cutOrSupplement(String.valueOf(music), 2));
        sb.append(SgTcpUtil.cutOrSupplement(String.valueOf(unCatchFillCoin), 2));
        sb.append(SgTcpUtil.cutOrSupplement(String.valueOf(keyForCatch), 2));
        sb.append(SgTcpUtil.cutOrSupplement(String.valueOf(continueAwardCoin), 2));
        sb.append(SgTcpUtil.cutOrSupplement(String.valueOf(gameAutoStart), 2));
        return sb.toString();
    }

    /**
     * 将低位在前的字节数组转换成16进制字符串
     * @param sourceString
     * @return
     */
    private String getConvertResult(String sourceString) {
//        return SgTcpUtil.bytes2HexString(SgTcpUtil.IntToByteArray(Integer.parseInt(sourceString)));
        return SgTcpUtil.intStringToHexString(sourceString, 4);
    }


    public static void main(String[] args){
        TcpSetTerminalParamBabyRequest tcpIncreaseCreditRequest = new TcpSetTerminalParamBabyRequest();
        tcpIncreaseCreditRequest.setDeviceId("10001");
        System.out.println(tcpIncreaseCreditRequest.toString());
    }
}

